package view;

import bean.Express;
import java.util.Scanner;

//V视图展示(给用户提示:欢迎，菜单，子菜单)
//负责给用户展示并接收数据返回结果给调用者，调用者进行调度逻辑
//把所有需要给用户展示的视图作为独立的逻辑封装在类中作为对象的方法存在

public class Views {
    //不止menu中需要输入数据，封装属性，供本类所有方法使用
    private Scanner input=new Scanner(System.in);

    /**
     * 欢迎
     */
    public void welcome(){
        System.out.println("欢迎使用xxx快递管理系统");
    }

    /**
     * 再见
     */
    public void bye(){
        System.out.println("欢迎下次使用");
    }

    /**
     * 选择身份的菜单
     * @return
     */
    public int menu(){
        System.out.println("根据提示，输入功能序号:");
        System.out.println("1.快递员");
        System.out.println("2.用户");
        System.out.println("0.退出");
        //这里的代码逻辑，相较于input.nextInt()优点在哪?
        //1.使用nextInt接收数据，有什么不好？
        //2.单是下面代码逻辑是没有优点的，但是就全局代码，是有优点的:
        //  1.nextLine和其他的next方法有冲突，
        //  2.所有输入都使用nextLine,这样不会因为输入产生冲突，还可以接收各种类型数据
        String text = input.nextLine();
        int num=-1;
        //public static int parseInt(String s) throws NumberFormatException
        //parseInt方法抛出数字格式化异常，调用者处理异常(RuntimeException)
        try{
            num = Integer.parseInt(text);
        }catch (NumberFormatException e){

        }
        if (num<0||num>2){
            System.out.println("请输入正确序号");
            return menu();
        }
        return num;
    }

    /**
     * 快递员子菜单
     * @return
     */
    public int cMenu(){
        System.out.println("根据提示，输入功能序号:");
        System.out.println("1.快递录入");
        System.out.println("2.快递修改");
        System.out.println("3.快递删除");
        System.out.println("4.查看所有快递");
        System.out.println("0.返回上级目录");
        String text = input.nextLine();
        int num=-1;
        try{
            num = Integer.parseInt(text);
        }catch (NumberFormatException e){

        }
        if (num<0||num>4){
            System.out.println("请输入正确序号");
            return menu();
        }
        return num;
    }

    /**
     * 快递员录入快递
     * @return 包含了快递单号和快递公司的快递单号
     */
    public Express insert(){
        System.out.println("根据提示输入快递信息:");
        System.out.println("输入快递单号:");
        String number = input.nextLine();
        System.out.println("输入快递公司:");
        String company = input.nextLine();
        //生成取件码属于存快递逻辑，不属于视图，视图只负责打印和接收数据并返回数据
        Express e = new Express();
        e.setNumber(number);
        e.setCompany(company);
        return e;
    }

    /**提示用户输入快递单号
     * 修改和删除快递都需要，抽取成方法
     * @return
     */
    public String findByNumber(){
        System.out.println("根据提示输入快递信息:");
        System.out.println("输入查询的快递单号:");
        String num = input.nextLine();
        return num;
    }

    /**
     * 显示快递信息
     * @param e
     */
    public void printExpress(Express e){
        System.out.println("快递信息如下:");
        System.out.println("快递公司:"+e.getCompany()+",快递单号"+e.getNumber()
                +",取件码"+e.getCode());
    }

    public void printNull(){
        System.out.println("快递不存在，请检查输入");
    }

    /**
     * 修改快递信息
     * @param e
     * @return
     */
    public void update(Express e){
        System.out.println("请根据提示，输入快递信息:");
        System.out.println("输入要修改的快递单号:");
        String num = input.nextLine();
        System.out.println("输入要修改的快递公司:");
        String company = input.nextLine();
        e.setNumber(num);
        e.setCompany(company);
    }

    /**
     * 确认是否删除
     * @return
     */
    public int delete(){
        System.out.println("是否确认删除?");
        System.out.println("1.确认删除 2.取消删除 0.退出");
        String text = input.nextLine();
        int num=-1;
        try{
            num = Integer.parseInt(text);
        }catch (NumberFormatException e){

        }
        if (num<0||num>2){
            System.out.println("输入有误，重新输入");
            return delete();
        }
        return num;
    }

    /**
     * 打印所有快递
     * @param es
     */
    public void printAll(Express[][] es){
        int count=0;
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < 10; j++) {
                if (es[i][j]!=null){
                    count++;
                    System.out.print("第"+(i+1)+"排"+(j+1)+"列快递");
                    printExpress(es[i][j]);
                }
            }
        }
        if (count==0){
            System.out.println("暂无快递信息");
        }
    }

    /**
     * 用户子菜单
     * @return
     */
    public int uMenu() {
        System.out.println("根据提示，进行取件:");
        System.out.println("请输入取件码:");
        String code = input.nextLine();
        int num=-1;
        try{
            num = Integer.parseInt(code);
        }catch (NumberFormatException e){

        }
        if (num<100000||num>999999){ //6位取件码
            System.out.println("输入有误，重新输入");
            return uMenu();
        }
        return num;
    }

    /**
     * 快递单号存在时给出提示
     */
    public void expressExist(){
        System.out.println("此单号在快递柜中已存在，勿重复存储");
    }

    public void success(){
        System.out.println("操作成功");
    }
}